home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / phpMyAdmin / libraries / storage_engines.lib.php < prev    next >
PHP Script  |  2005-03-04  |  8KB  |  254 lines

  1. <?php
  2. /* $Id: storage_engines.lib.php,v 2.4 2005/03/05 13:30:00 rabus Exp $ */
  3. // vim: expandtab sw=4 ts=4 sts=4:
  4.  
  5. /**
  6.  * Library for extracting information about the available storage engines
  7.  */
  8.  
  9. $GLOBALS['mysql_storage_engines'] = array();
  10.  
  11. if (PMA_MYSQL_INT_VERSION >= 40102) {
  12.     /**
  13.      * For MySQL >= 4.1.2, the job is easy...
  14.      */
  15.     $res = PMA_DBI_query('SHOW STORAGE ENGINES');
  16.     while ($row = PMA_DBI_fetch_assoc($res)) {
  17.         $GLOBALS['mysql_storage_engines'][strtolower($row['Engine'])] = $row;
  18.     }
  19.     PMA_DBI_free_result($res);
  20.     unset($res, $row);
  21. } else {
  22.     /**
  23.      * Emulating SHOW STORAGE ENGINES...
  24.      */
  25.     $GLOBALS['mysql_storage_engines'] = array(
  26.         'myisam' => array(
  27.             'Engine'  => 'MyISAM',
  28.             'Support' => 'DEFAULT'
  29.         ),
  30.         'merge' => array(
  31.             'Engine'  => 'MERGE',
  32.             'Support' => 'YES'
  33.         ),
  34.         'heap' => array(
  35.             'Engine'  => 'HEAP',
  36.             'Support' => 'YES'
  37.         ),
  38.         'memory' => array(
  39.             'Engine'  => 'MEMORY',
  40.             'Support' => 'YES'
  41.         )
  42.     );
  43.     $known_engines = array(
  44.         'archive' => 'ARCHIVE',
  45.         'bdb'     => 'BDB',
  46.         'csv'     => 'CSV',
  47.         'innodb'  => 'InnoDB',
  48.         'isam'    => 'ISAM',
  49.         'gemini'  => 'Gemini'
  50.     );
  51.     $res = PMA_DBI_query('SHOW VARIABLES LIKE \'have\\_%\';');
  52.     while ($row = PMA_DBI_fetch_row($res)) {
  53.         $current = substr($row[0], 5);
  54.         if (!empty($known_engines[$current])) {
  55.             $GLOBALS['mysql_storage_engines'][$current] = array(
  56.                 'Engine'  => $known_engines[$current],
  57.                 'Support' => $row[1]
  58.             );
  59.         }
  60.     }
  61.     PMA_DBI_free_result($res);
  62.     unset($known_engines, $res, $row);
  63. }
  64.  
  65. /**
  66.  * Function for generating the storage engine selection
  67.  *
  68.  * @param   string   The name of the select form element
  69.  * @param   string   The ID of the form field
  70.  * @param   boolean  Should unavailable storage engines be offered?
  71.  * @param   string   The selected engine
  72.  * @param   int      The indentation level
  73.  *
  74.  * @global  array    The storage engines
  75.  *
  76.  * @return  string
  77.  *
  78.  * @author  rabus
  79.  */
  80. function PMA_generateEnginesDropdown($name = 'engine', $id = NULL, $offerUnavailableEngines = FALSE, $selected = NULL, $indent = 0) {
  81.     global $mysql_storage_engines;
  82.     $selected = strtolower($selected);
  83.     $spaces = '';
  84.     for ($i = 0; $i < $indent; $i++) $spaces .= '    ';
  85.     $output  = $spaces . '<select name="' . $name . '"' . (empty($id) ? '' : ' id="' . $id . '"') . '>' . "\n";
  86.     foreach ($mysql_storage_engines as $key => $details) {
  87.         if (!$offerUnavailableEngines && ($details['Support'] == 'NO' || $details['Support'] == 'DISABLED')) {
  88.         continue;
  89.     }
  90.         $output .= $spaces . '    <option value="' . htmlspecialchars($key). '"'
  91.              . (empty($details['Comment']) ? '' : ' title="' . htmlspecialchars($details['Comment']) . '"')
  92.          . ($key == $selected || (empty($selected) && $details['Support'] == 'DEFAULT') ? ' selected="selected"' : '') . '>' . "\n"
  93.              . $spaces . '        ' . htmlspecialchars($details['Engine']) . "\n"
  94.          . $spaces . '    </option>' . "\n";
  95.     }
  96.     $output .= $spaces . '</select>' . "\n";
  97.     return $output;
  98. }
  99.  
  100. /**
  101.  * Abstract Storage Engine Class
  102.  */
  103. define('PMA_ENGINE_SUPPORT_NO', 0);
  104. define('PMA_ENGINE_SUPPORT_DISABLED', 1);
  105. define('PMA_ENGINE_SUPPORT_YES', 2);
  106. define('PMA_ENGINE_SUPPORT_DEFAULT', 3);
  107. class PMA_StorageEngine {
  108.     var $engine  = 'dummy';
  109.     var $title   = 'PMA Dummy Engine Class';
  110.     var $comment = 'If you read this text inside phpMyAdmin, something went wrong...';
  111.     var $support = PMA_ENGINE_SUPPORT_NO;
  112.  
  113.     /**
  114.      * public static final PMA_StorageEngine getEngine ()
  115.      *
  116.      * Loads the corresponding engine plugin, if available.
  117.      *
  118.      * @param   String    The engine ID
  119.      *
  120.      * @return  Object    The engine plugin
  121.      */
  122.     function getEngine ($engine) {
  123.         $engine = str_replace('/', '', str_replace('.', '', $engine));
  124.         if (file_exists('./libraries/engines/' . $engine . '.lib.php') && include_once('./libraries/engines/' . $engine . '.lib.php')) {
  125.             $class_name = 'PMA_StorageEngine_' . $engine;
  126.             $engine_object = new $class_name($engine);
  127.         } else {
  128.             $engine_object = new PMA_StorageEngine($engine);
  129.         }
  130.         return $engine_object;
  131.     }
  132.  
  133.     /**
  134.      * Constructor
  135.      *
  136.      * @param    String    The engine ID
  137.      */
  138.     function PMA_StorageEngine ($engine) {
  139.         global $mysql_storage_engines;
  140.  
  141.         if (!empty($mysql_storage_engines[$engine])) {
  142.             $this->engine  = $engine;
  143.             $this->title   = $mysql_storage_engines[$engine]['Engine'];
  144.             $this->comment = $mysql_storage_engines[$engine]['Comment'];
  145.             switch ($mysql_storage_engines[$engine]['Support']) {
  146.                 case 'DEFAULT':
  147.                     $this->support = PMA_ENGINE_SUPPORT_DEFAULT;
  148.                     break;
  149.                 case 'YES':
  150.                     $this->support = PMA_ENGINE_SUPPORT_YES;
  151.                     break;
  152.                 case 'DISABLED':
  153.                     $this->support = PMA_ENGINE_SUPPORT_DISABLED;
  154.                     break;
  155.                 case 'NO':
  156.                 default:
  157.                     $this->support = PMA_ENGINE_SUPPORT_NO;
  158.             }
  159.         }
  160.     }
  161.  
  162.     /**
  163.      * public String getTitle ()
  164.      *
  165.      * Reveals the engine's title
  166.      *
  167.      * @return   String   The title
  168.      */
  169.     function getTitle () {
  170.         return $this->title;
  171.     }
  172.  
  173.     /**
  174.      * public String getComment ()
  175.      *
  176.      * Fetches the server's comment about this engine
  177.      *
  178.      * @return   String   The comment
  179.      */
  180.     function getComment () {
  181.         return $this->comment;
  182.     }
  183.  
  184.     /**
  185.      * public String getSupportInformationMessage ()
  186.      *
  187.      * @return   String   The localized message.
  188.      */
  189.     function getSupportInformationMessage () {
  190.         switch ($this->support) {
  191.             case PMA_ENGINE_SUPPORT_DEFAULT:
  192.                 $message = $GLOBALS['strDefaultEngine'];
  193.                 break;
  194.             case PMA_ENGINE_SUPPORT_YES:
  195.                 $message = $GLOBALS['strEngineAvailable'];
  196.                 break;
  197.             case PMA_ENGINE_SUPPORT_DISABLED:
  198.                 $message = $GLOBALS['strEngineUnsupported'];
  199.                 break;
  200.             case PMA_ENGINE_SUPPORT_NO:
  201.             default:
  202.                 $message = $GLOBALS['strEngineUnavailable'];
  203.         }
  204.         return sprintf($message, htmlspecialchars($this->title));
  205.     }
  206.  
  207.     /**
  208.      * public String[][] getVariables ()
  209.      *
  210.      * Generates a list of MySQL variables that provide information about this
  211.      * engine. This function should be overridden when extending this class
  212.      * for a particular engine.
  213.      *
  214.      * @return   Array   The list of variables.
  215.      */
  216.     function getVariables () {
  217.         return array();
  218.     }
  219.  
  220.     /**
  221.      * public String getVariablesLikePattern ()
  222.      */
  223.     function getVariablesLikePattern () {
  224.         return FALSE;
  225.     }
  226.  
  227.     /**
  228.      * public String[] getInfoPages ()
  229.      *
  230.      * Returns a list of available information pages with labels
  231.      *
  232.      * @return   Array    The list
  233.      */
  234.     function getInfoPages () {
  235.         return array();
  236.     }
  237.  
  238.     /**
  239.      * public String getPage ()
  240.      *
  241.      * Generates the requested information page
  242.      *
  243.      * @param    String    The page ID
  244.      *
  245.      * @return   String    The page
  246.      *           boolean   or FALSE on error.
  247.      */
  248.     function getPage($id) {
  249.         return FALSE;
  250.     }
  251. }
  252.  
  253. ?>
  254.